#ifndef DEFINE
#define DEFINE

#define GL3_PROTOTYPES 1
#define GL_GLEXT_PROTOTYPES 1
#define GLX_GLXEXT_PROTOTYPES 1
#define __CL_ENABLE_EXCEPTIONS
//#define __NO_STD_VECTOR
//#define __NO_STD_STRING

#include <iostream>
#include <opengl/gl3.h>
//#include <opengl/gl.h>
#include <opengl/glu.h>
#include <opengl/glut.h>

#include <opengl/glext.h>
#if defined WIN32 || defined WIN64
    #include <opengl/wglext.h>
#endif

#include <opengl/GLTool.h>
#include <opencl/cl.hpp>


typedef unsigned int	GLenum;
typedef unsigned char	GLboolean;
typedef unsigned int	GLbitfield;
typedef void		    GLvoid;
typedef signed char	    GLbyte;		/* 1-byte signed */
typedef short		    GLshort;	/* 2-byte signed */
typedef int		        GLint;		/* 4-byte signed */
typedef unsigned char	GLubyte;	/* 1-byte unsigned */
typedef unsigned short	GLushort;	/* 2-byte unsigned */
typedef unsigned int	GLuint;		/* 4-byte unsigned */
typedef int		        GLsizei;	/* 4-byte signed */
typedef float		    GLfloat;	/* single precision float */
typedef float		    GLclampf;	/* single precision float in [0,1] */
typedef double		    GLdouble;	/* double precision float */
typedef double		    GLclampd;	/* double precision float in [0,1] */

namespace sleek
{
    namespace core
    {
        static float PI = 3.14159265f;
        #define DegToRad *sleek::core::PI/180
        #define RadToDeg /sleek::core::PI*180

        static const char *version = "0.3";
        static const char *engine_name = "SleekThink";
        static const char *engine_auth = "Jehan-Antoine Vayssade";

        static const char *licence = "Creative common";
        static const char *licence_attribute = "by-nc-sa";

        typedef unsigned char  u8;
        typedef unsigned short u16;
        typedef unsigned int   u32;
        typedef unsigned long  u64;

        typedef signed char  s8;
        typedef signed short s16;
        typedef signed int   s32;
        typedef signed long  s64;

        typedef float  f32;
        typedef double f64;
    }
}

#endif
